// 检查是否在 Electron 环境中运行
const isElectron = typeof window !== 'undefined' && 
                   typeof window.process === 'object' && 
                   window.process.type === 'renderer';

// 检查是否在移动设备上运行
const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);

// 动态加载依赖（仅在需要时）
const Hls = isMobile || !isElectron ? require('hls.js') : window.Hls;

// DOM 元素
const videoElement = document.getElementById('video');
const hlsBtn = document.getElementById('hlsBtn');
const rtmpBtn = document.getElementById('rtmpBtn');
const autoSwitchBtn = document.getElementById('autoSwitchBtn');
const statusElement = document.getElementById('status');
const fallbackMessage = document.getElementById('fallbackMessage');

// 播放器状态变量
let streamUrls = {};
let currentStreamType = null;
let isAutoSwitching = false;
let hls = null;
let switchInterval = null;

// 初始化应用
async function init() {
    try {
        // 获取直播地址
        if (isElectron) {
            const { ipcRenderer } = require('electron');
            streamUrls = await ipcRenderer.invoke('get-stream-urls');
        } else {
            // 移动端或其他环境 (使用默认地址)
            streamUrls = {
                hls: 'http://10.120.22.196:10086/hls/ZKby23IHg/playlist.m3u8',
                rtmp: 'rtmp://10.120.22.196:10035/live/ZKby23IHg'
            };
        }
        
        // 绑定事件监听器
        bindEvents();
        
        // 默认播放 HLS 流
        playHlsStream();
        
        updateStatus('就绪', 'green');
    } catch (error) {
        console.error('初始化失败:', error);
        updateStatus('初始化失败', 'red');
    }
}

// 绑定事件监听器
function bindEvents() {
    if (hlsBtn) hlsBtn.addEventListener('click', playHlsStream);
    if (rtmpBtn) rtmpBtn.addEventListener('click', playRtmpStream);
    if (autoSwitchBtn) autoSwitchBtn.addEventListener('click', toggleAutoSwitch);
    
    videoElement.addEventListener('play', () => {
        updateStatus('正在播放', 'green');
    });
    
    videoElement.addEventListener('pause', () => {
        updateStatus('已暂停', 'yellow');
    });
    
    videoElement.addEventListener('error', (e) => {
        console.error('播放错误:', e);
        updateStatus('播放错误', 'red');
    });
}

// 播放 HLS 流
function playHlsStream() {
    if (currentStreamType === 'hls') return;
    
    stopCurrentStream();
    
    currentStreamType = 'hls';
    updateStatus('正在加载 HLS 流...', 'yellow');
    
    if (Hls.isSupported()) {
        hls = new Hls();
        hls.loadSource(streamUrls.hls);
        hls.attachMedia(videoElement);
        
        hls.on(Hls.Events.MANIFEST_PARSED, () => {
            updateStatus('HLS 流播放中', 'green');
            videoElement.play();
        });
        
        hls.on(Hls.Events.ERROR, (event, data) => {
            console.error('HLS 错误:', data);
            updateStatus(`HLS 错误: ${data.type}`, 'red');
            
            // 如果启用自动切换，则尝试切换到 RTMP
            if (isAutoSwitching) {
                setTimeout(() => {
                    playRtmpStream();
                }, 2000);
            }
        });
    } else if (videoElement.canPlayType('application/vnd.apple.mpegurl')) {
        // Safari 浏览器原生支持 HLS
        videoElement.src = streamUrls.hls;
        videoElement.addEventListener('loadedmetadata', () => {
            updateStatus('HLS 流播放中', 'green');
            playbackStatusElement.textContent = '正在播放';
            videoElement.play();
        });
    } else {
        // 不支持 HLS
        updateStatus('不支持 HLS', 'red');
        fallbackMessage.style.display = 'block';
    }
    
    // 更新按钮状态
    if (hlsBtn) hlsBtn.classList.add('active');
    if (rtmpBtn) rtmpBtn.classList.remove('active');
}

// 播放 RTMP 流 (通过 video.js 或其他方式实现，此处为简化版本)
function playRtmpStream() {
    if (currentStreamType === 'rtmp') return;
    
    stopCurrentStream();
    
    currentStreamType = 'rtmp';
    updateStatus('RTMP 流播放中', 'green');
    
    // 使用原生 video 标签播放 RTMP (注意：大多数浏览器不支持直接播放 RTMP)
    // 这里仅作演示，实际项目中可能需要使用插件或转换为其他协议
    videoElement.src = streamUrls.rtmp;
    
    videoElement.addEventListener('error', () => {
        updateStatus('RTMP 播放失败，可能需要插件支持', 'red');
        
        // 如果启用自动切换，则尝试切换到 HLS
        if (isAutoSwitching) {
            setTimeout(() => {
                playHlsStream();
            }, 2000);
        }
    });
    
    // 更新按钮状态
    if (rtmpBtn) rtmpBtn.classList.add('active');
    if (hlsBtn) hlsBtn.classList.remove('active');
}

// 停止当前流
function stopCurrentStream() {
    if (hls) {
        hls.destroy();
        hls = null;
    }
    
    videoElement.src = '';
    if (fallbackMessage) fallbackMessage.style.display = 'none';
}

// 切换自动切换模式
function toggleAutoSwitch() {
    isAutoSwitching = !isAutoSwitching;
    
    if (isAutoSwitching) {
        if (autoSwitchBtn) {
            autoSwitchBtn.classList.add('active');
            autoSwitchBtn.textContent = '自动切换模式 (开)';
        }
        updateStatus('自动切换模式已开启', 'green');
        
        // 设置定时切换 (仅作演示，实际应用中应根据网络状况或错误事件切换)
        switchInterval = setInterval(() => {
            if (currentStreamType === 'hls') {
                playRtmpStream();
            } else {
                playHlsStream();
            }
        }, 30000); // 每30秒切换一次
    } else {
        if (autoSwitchBtn) {
            autoSwitchBtn.classList.remove('active');
            autoSwitchBtn.textContent = '自动切换模式';
        }
        updateStatus('自动切换模式已关闭', 'green');
        
        if (switchInterval) {
            clearInterval(switchInterval);
            switchInterval = null;
        }
    }
}

// 更新状态显示
function updateStatus(message, color) {
    if (statusElement) {
        statusElement.textContent = message;
        statusElement.style.color = color;
    }
}

// 应用初始化
document.addEventListener('DOMContentLoaded', init);

// 页面关闭时清理资源
window.addEventListener('beforeunload', () => {
    stopCurrentStream();
    if (switchInterval) {
        clearInterval(switchInterval);
    }
});